Demonstrate dynamic `import()` semantics

  $ . ./setup.sh

  $ cat > dune-project <<EOF
  > (lang dune 3.9)
  > (using melange 0.1)
  > EOF

  $ cat > dune <<EOF
  > (melange.emit
  >  (target out)
  >  (preprocess (pps melange.ppx))
  >  (emit_stdlib false))
  > EOF

  $ cat > x.ml <<EOF
  > module type y = module type of Y
  > let x () = Js.import (module Y : y)
  > module type z = module type of Z
  > let a = Js.import (module Z : z)
  > let b = Js.import Y.x
  > external ext: string = "default" [@@mel.module "lib"]
  > let _ext: string Js.promise = Js.import(ext)
  > EOF

  $ cat > y.ml <<EOF
  > let x = 1
  > EOF

  $ cat > z.ml <<EOF
  > let a = Array.iter Js.log [| 1 |]
  > EOF

  $ dune build @melange

  $ cat _build/default/out/x.js
  // Generated by Melange
  'use strict';
  
  
  function x(param) {
    return import("./y.js");
  }
  
  const a = import("./z.js");
  
  const b = import("./y.js").then(function (m) {
    return m.x;
  });
  
  const _ext = import("lib").then(function (m) {
    return m.default;
  });
  
  module.exports = {
    x,
    a,
    b,
    _ext,
  }
  /* a Not a pure module */
